const express = require('express')
const xlsx = require('xlsx')
const fs = require('fs')
const { v4: uuidv4 } = require('uuid')
const { sendResponse } = require('../utils/sendResponse.js')
const { getFilePath, createExcelFileIfNotExists } = require('../utils/constants.js') // 引入常量
const authenticateToken = require('../utils/authMiddleware.js') // 身份验证中间件

const router = express.Router()
// 使用绝对路径
const filePath = getFilePath('comments')
// 如果文件不存在，创建一个新的 Excel 文件来存储评论
createExcelFileIfNotExists(filePath, 'comments')

// 评论路由 (需要身份验证)
router.post('/addComment', authenticateToken, (req, res) => {
  const { articleId, content, parentCommentId } = req.body
  const { account, userId: authorId } = req.user // 从认证用户中获取评论者信息，包括作者ID

  // 检查是否提供了必填项
  if (!articleId || !content) {
    return sendResponse(res, 400, {}, '请提供文章ID和评论内容。')
  }

  const commentId = uuidv4() // 生成评论 ID
  const createdAt = new Date().toISOString() // 评论时间

  // 创建新评论数据
  const newComment = {
    ID: commentId,
    ArticleID: articleId, // 关联的文章ID
    Content: content, // 评论内容
    CreatedAt: createdAt, // 评论时间
    Author: account, // 评论者用户名
    AuthorID: authorId, // 评论者ID
    ParentCommentID: parentCommentId || null, // 如果是顶级评论，ParentCommentID 为 null
    Likes: 0 // 点赞数，初始化为 0
  }

  const workbook = xlsx.readFile(filePath)
  const worksheet = workbook.Sheets['comments']
  const commentsData = xlsx.utils.sheet_to_json(worksheet)

  // 将新评论添加到评论数据中
  commentsData.push(newComment)

  // 将更新后的评论数据写入 Excel 文件
  const newSheet = xlsx.utils.json_to_sheet(commentsData)
  workbook.Sheets['comments'] = newSheet
  xlsx.writeFile(workbook, filePath)

  // 返回发布评论成功的响应
  return sendResponse(res, 200, { commentId, articleId, content, author: account, authorId, parentCommentId }, '评论发布成功！')
})

module.exports = router
